Spring Security এবং WebClient-এর ইন্টিগ্রেশন ব্যবহার করে আপনি সুরক্ষিত HTTP রিকুয়েস্ট পরিচালনা করতে পারেন। এটি প্রায়ই OAuth2, JWT, Basic Authentication, বা API Key ব্যবহার করে নিরাপদ অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়।
প্রয়োজনীয় ডিপেন্ডেন্সি
Maven ডিপেন্ডেন্সি
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
Spring Security এবং WebClient সেটআপ
১. WebClient Bean তৈরি (Spring Security সহ)
WebClient-এ Spring Security কনফিগার করতে ServerOAuth2AuthorizedClientExchangeFilterFunction ব্যবহার করতে হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(ClientRegistrationRepository clientRegistrationRepository,
org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository authorizedClientRepository) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2 =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrationRepository, authorizedClientRepository);
oauth2.setDefaultOAuth2AuthorizedClient(true);
return WebClient.builder()
.filter(oauth2)
.build();
}
}
২. application.yml (OAuth2 Client Configuration)
OAuth2 ক্লায়েন্ট কনফিগারেশনের জন্য application.yml এ নিচের সেটিংস যোগ করুন:
spring:
security:
oauth2:
client:
registration:
my-client:
client-id: your-client-id
client-secret: your-client-secret
authorization-grant-type: client_credentials
scope: read
provider:
my-provider:
token-uri: https://example.com/oauth/token
৩. WebClient ব্যবহার করে API কল
WebClient Bean ব্যবহার করে সুরক্ষিত API কল করতে পারেন।
GET Request:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class ApiController {
@Autowired
private WebClient webClient;
@GetMapping("/secure-api")
public Mono<String> callSecureApi() {
return webClient.get()
.uri("https://api.example.com/secure-data")
.retrieve()
.bodyToMono(String.class);
}
}
POST Request with Bearer Token:
@GetMapping("/post-secure")
public Mono<String> postSecure() {
return webClient.post()
.uri("https://api.example.com/secure-endpoint")
.bodyValue(new MyRequest("data"))
.retrieve()
.bodyToMono(String.class);
}
static class MyRequest {
private String value;
public MyRequest(String value) {
this.value = value;
}
// Getters and setters
}
৪. Basic Authentication সহ WebClient
WebClient Bean কনফিগারেশন:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientBasicAuthConfig {
@Bean
public WebClient webClientWithBasicAuth() {
return WebClient.builder()
.defaultHeaders(headers -> headers.setBasicAuth("username", "password"))
.build();
}
}
API কল:
@GetMapping("/basic-auth-api")
public Mono<String> basicAuthApi() {
return webClientWithBasicAuth.get()
.uri("https://api.example.com/basic-auth")
.retrieve()
.bodyToMono(String.class);
}
৫. JWT Token সহ WebClient
JWT Token ব্যবহারের জন্য Custom Header যোগ করুন:
@Bean
public WebClient webClientWithJwt() {
return WebClient.builder()
.defaultHeaders(headers -> headers.setBearerAuth("your-jwt-token"))
.build();
}
API কল:
@GetMapping("/jwt-auth-api")
public Mono<String> jwtAuthApi() {
return webClientWithJwt.get()
.uri("https://api.example.com/jwt-secure")
.retrieve()
.bodyToMono(String.class);
}
Spring Security এর সুবিধা WebClient-এ
- OAuth2 Integration: Spring Security সরাসরি OAuth2 ক্লায়েন্ট সাপোর্ট দেয়।
- Bearer Token Management: টোকেন স্বয়ংক্রিয়ভাবে যোগ ও রিফ্রেশ হয়।
- Custom Authentication: Basic Auth বা Custom JWT ব্যবহার সহজ।
উপসংহার
Spring Security এবং WebClient এর ইন্টিগ্রেশন আপনাকে সুরক্ষিত HTTP কল সহজে পরিচালনা করতে সাহায্য করে। আপনি OAuth2, Basic Auth বা JWT Token ব্যবহার করে বিভিন্ন ধরণের নিরাপত্তা সমর্থিত API কল করতে পারবেন।
Read more